using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.ObjectBuilder;
using Microsoft.Practices.CompositeWeb;
using System.Transactions;
using GC2.Entities.Admin;
using GC2.ExceptionHandler.Services;
using GC2.DataAccess.DAAdmin;

namespace GC2.Bussines.BMAdmin
{
    public class BMVentas
    {
        public BMVentas(string coneccion) 
        {
            this.Connection = coneccion;
        }

        private string connection = "";
        public string Connection
        {
            get { return connection; }
            set { connection = value; }
        }

        private Ventas oVentas = new Ventas();
        private List<Ventas> listaVentas = new List<Ventas>();
        private DAVentas daVentas = new DAVentas();

        #region BMVentasSearch
        public List<Ventas> BMVentasSearch(Ventas ventaD, Ventas ventaH)
        {
            try
            {
                listaVentas = daVentas.DAventasSearch(connection, ventaD, ventaH);
                return listaVentas;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region BMVentasInsert
        public void BMVentasInsert(Ventas venta)
        {
            try
            {
                daVentas.DAVentasInsert(connection, venta);
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region BMVentasUpdate
        public void BMVentasUpdate(Ventas venta)
        {
            try
            {
                daVentas.DAVentasUpdate(connection, venta);
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region BMVentasUpdateCtaCte
        public void BMVentasUpdateCtaCte(Ventas venta)
        {
            try
            {
                daVentas.DaVentasUpdateCtaCte(connection, venta);
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region BMVentasGetNext
        public Ventas BMVentasGetNext()
        {
            try
            {
                oVentas = daVentas.DAVentasGetNext(connection);
                return oVentas;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region RptLibroVentas
        public List<Ventas> RptLibroVentas(int pMes, int pAnio)
        {
            try
            {
                List<Ventas>  listaVentasRpt = new List<Ventas>();
                oVentas = new Ventas();
                oVentas.PFMes = pMes;
                oVentas.PFAnio = pAnio;
                listaVentas = daVentas.DAventasSearch(Connection, oVentas, oVentas);
                DAVentasDet daVentasDet = new DAVentasDet();
                VentasDet ventaDet = new VentasDet();
                foreach (Ventas venta in listaVentas)
                {
                    bool bNC = false;
                    if (venta.Total < 0)
                    {
                        bNC = true;
                    }
                    venta.Total = 0;
                    venta.Impuesto = 0;
                    venta.TTotal = 0;

                    if (venta.Id_Estado == 2)
                    {
                        venta.Id_Cliente = 0;
                        venta.Cliente = "Anulada";
                    }
                    else
                    {
                        ventaDet.Id_Ventas = venta.Id_Ventas;
                        List<VentasDet> listaVentasDet = new List<VentasDet>();

                        listaVentasDet = daVentasDet.DAVentasDetGetAll(Connection, ventaDet);
                        foreach (VentasDet itemDet in listaVentasDet)
                        {
                            if (bNC) // es Nota de Credito
                            {
                                itemDet.Impuesto = itemDet.Impuesto * (-1);
                                itemDet.Monto = itemDet.Monto * (-1);
                            }
                            switch (itemDet.TTasa)
                            {
                                case 1:
                                    venta.Impuesto1 += itemDet.Impuesto;
                                    venta.Impuesto += itemDet.Impuesto;
                                    break;
                                case 2:
                                    venta.Impuesto2 += itemDet.Impuesto;
                                    venta.Impuesto += itemDet.Impuesto;
                                    break;
                                case 3:
                                    venta.Impuesto3 += itemDet.Impuesto;
                                    venta.Impuesto += itemDet.Impuesto;
                                    break;
                                case 4:
                                    venta.Impuesto4 += itemDet.Impuesto;
                                    venta.Impuesto += itemDet.Impuesto;
                                    break;
                                case 5:
                                    venta.Impuesto5 += itemDet.Impuesto;
                                    venta.Impuesto += itemDet.Impuesto;
                                    break;
                                default:
                                    break;
                            }
                            venta.Total += itemDet.Monto;
                            venta.TTotal += itemDet.Monto + itemDet.Impuesto;
                        }
                    }
                }

                return listaVentas;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion
    }
}
